var crypto = require('crypto');

function WXBizDataCrypt(appId, sessionKey) {
    this.appId = appId;
    this.sessionKey = sessionKey;
}

WXBizDataCrypt.prototype.decryptData = function (encryptedData, iv) {
    // base64 decode
    // eslint-disable-next-line no-undef,new-cap
    var sessionKey = new Buffer.from(this.sessionKey, 'base64');
    // eslint-disable-next-line no-undef,new-cap
    encryptedData = new Buffer.from(encryptedData, 'base64');
    // eslint-disable-next-line no-undef,new-cap
    iv = new Buffer.from(iv, 'base64');

    try {
        // 解密
        var decipher = crypto.createDecipheriv('aes-128-cbc', sessionKey, iv);
        // 设置自动 padding 为 true，删除填充补位
        decipher.setAutoPadding(true);
        var decoded = decipher.update(encryptedData, 'binary', 'utf8');
        decoded += decipher.final('utf8');

        decoded = JSON.parse(decoded);
    } catch (err) {
        throw new Error('Illegal Buffer');
    }

    if (decoded.watermark.appid !== this.appId) {
        throw new Error('Illegal Buffer');
    }

    return decoded;
};

module.exports = WXBizDataCrypt;
